package GA_Test;
import com.csvreader.CsvReader;


import java.nio.charset.Charset;
import java.util.ArrayList;

/*
NAME：文件读取
函数：
1、ReadNode() 顾客信息读取
2、countDistance() 距离计算
 */
public class ReadData {

    public static Node[] node;
   static int i =0;
   static String[] r = new String[]{
           "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\C101.50.csv", "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\C102.50.csv",
           "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\C201.25.csv", "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\C202.25.csv",
           "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\C203.25.csv", "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\R101.25.csv",
           "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\R102.25.csv", "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\R103.25.csv",
           "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\R201.50.csv", "C:\\Users\\USER\\Desktop\\文件备份\\mk\\所罗门算例\\R202.50.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n32-k5\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n33-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n33-k6\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n34-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n36-k5\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n37-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n37-k6\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n38-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n39-k5\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n39-k6\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n44-k6\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n45-k6\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n46-k7\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n48-k7\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n53-k7\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n54-k7\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n55-k9\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n62-k8\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n63-k10\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n65-k9\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\A-n69-k9\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\补充数据\\A-n80-k10\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\B-n31-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\B-n34-k5\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\B-n35-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\B-n38-k6\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\中规模数据\\B-n39-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\B-n41-k6\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\补充数据\\B-n51-k7\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\补充数据\\B-n56-k7\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\补充数据\\B-n63-k10\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\补充数据\\B-n78-k10\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\E-n51-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\E-n76-k7\\数据集.csv", "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\E-n76-k8\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\E-n76-k10\\数据集.csv", "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\E-n76-k14\\数据集.csv",
//
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n40-k5\\数据集.csv", "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n45-k5\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n50-k7\\数据集.csv", "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n50-k8\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n50-k10\\数据集.csv", "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n55-k7\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n55-k10\\数据集.csv", "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n55-k15\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n60-k10\\数据集.csv", "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n60-k15\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n65-k10\\数据集.csv", "C:\\Users\\USER\\Desktop\\mk\\中规模数据\\P-n70-k10\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\E-n101-k14\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\M-n101-K10\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\M-n151-k12\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\M-n200-k16\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Golden_17_240\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Golden_18_300\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Golden_19_360\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\tai385\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Golden_20_420\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Li_21_560\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Li_25_760\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Li_28_880\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Li_29_960\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Li_30_1040\\数据集.csv",
//           "C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Li_31_1120\\数据集.csv","C:\\Users\\USER\\Desktop\\mk\\大规模数据2\\Li_32_1200\\数据集.csv",
   };


    public static Object[] ReadNode( )
    {
        Object[] obj = new Object[2];
        /*****************客户点csv文件读入*********************/
        try {
            ArrayList<String[]> csvFileList = new ArrayList<String[]>();
            String s = r[i];
            String csvFilePath = s;
            CsvReader ReaderNode = new CsvReader(csvFilePath,',', Charset.forName("UTF-8"));
            while (ReaderNode.readRecord())
            {
                csvFileList.add(ReaderNode.getValues());
            }
            ReaderNode.close();
            //在点的数据中，已经有零点，不用再造零点，所以储存数组的长度减一，对应66行编号也要减一
            node = new Node[csvFileList.size()];

            for (int i =1; i<csvFileList.size(); i++)
            {
                String[] strData = csvFileList.get(i);
                Node d=new Node();
                //每一次读一列然后task类型的对象里

                d.id= Integer.parseInt(strData[0]);
                d.x=Integer.parseInt(strData[1]);
                d.y= Integer.parseInt(strData[2]);
                d.demand = Integer.parseInt(strData[3]);
                //在把对象塞到数组里，这个数组相当于二维数组
                node [i-1]=d;
            }
            int num=node.length-1;
//			//计算距离
            obj[0] = node;
            Double[][] Distance = new Double[num][num];
            for(int i=0;i<num;i++)
            {
                for(int j=0;j<num;j++)
                {
//					//两个任务间x坐标的差值
                    double Dx=node[i].x-node[j].x;
//					//两个任务间y坐标的差值
                    double Dy=node[i].y-node[j].y;
//					//计算距离
                    Distance[i][j]=Math.sqrt((Dx*Dx)+(Dy*Dy));
//
                    //System.out.print(Distance[i][j]);
                    //  System.out.print("  ");
                }
                //System.out.println();
            }
            obj[1] = Distance;
            i++;
        } catch (Exception e)
        {
            e.printStackTrace();
        }

        return obj;
    }

//    public static Double[][] countDistance(){
//        Node[] node= ReadData.ReadNode();
//        int num=node.length-1;
////			//计算距离
//        i++;
//        Double[][] Distance = new Double[num][num];
//        for(int i=0;i<num;i++)
//        {
//            for(int j=0;j<num;j++)
//            {
////					//两个任务间x坐标的差值
//                double Dx=node[i].x-node[j].x;
////					//两个任务间y坐标的差值
//                double Dy=node[i].y-node[j].y;
////					//计算距离
//                Distance[i][j]=Math.sqrt((Dx*Dx)+(Dy*Dy));
////
//                //System.out.print(Distance[i][j]);
//              //  System.out.print("  ");
//            }
//            //System.out.println();
//        }
//        return Distance;
//    }
}
